# -*- coding: utf-8 -*-
# @Time      : 2024/5/9 13:53
# @Author    : 未命名
# @File      : testBs4
# @Software  : PyCharm


'''
BeautifulSoup4 将复杂的HTML文档解析成复杂的树形结构，每个节点都是python对象，所有对象可以归纳为4种：
1. Tag
2. NavigableString
3. BeautifulSoup
4. Comment
'''
import re

from bs4 import BeautifulSoup

file = open("./baidu.html", "rb")
html = file.read()
bs = BeautifulSoup(html, "html.parser")

# print(bs)
# print(type(bs))

# print(bs.title)            #获取title标签的所有内容
# print(bs.title.name)       #获取标签名称
# print(bs.title.string)     #获取标签文本内容
# print(bs.head)             #获得标签全部内容
# print(bs.div)              #获取第一个div标签的所有内容

#1.Tag   html中第一个标签
# print(bs.a)
# print(type(bs.a))
# print(bs.name)
# print(bs.a.attrs)   #获取标签的所有属性

#2.NavigableString
# print(bs.title.string)
# print(type(bs.title.string))

# #3.BeautifulSoup   表示整个文档内容
# print(bs)
# print(type(bs))
# print(bs.name)
# print(bs.a.atts)
# print(bs.attrs)

#4.comment  表示注释 是一个特殊的NavigableString,输出的不包含注释符
# print(bs.a.string)
# print(type(bs.a.string))
# print(bs.a.comment)
# print('--------------------------------')


# print(bs.find_all("a"))

# contents 获取Tag的所有子节点，返回一个List
# print(bs.head.contents)
# print(bs.head.contents[1])

# for child in bs.body.children:
#     print(child)

#文档的搜索
#1.find_all() 字符串过滤：会查找与字符串完全匹配的内容
# t_list = bs.find_all("a")
# for t in t_list:
#     print(t.get_text())

# 2.正则表达式搜索：使用search()方法匹配内容
# 通过正则效验规则，将所有字符串包含a的标签都找到放进列表中
# import  re
# t_list = bs.find_all(re.compile("a"))
# print(t_list)

#方法：传入一个参数，根据函数的要求去搜索
# def get_links(tag):
#     return tag.has_attr("name")
# t_list = bs.find_all(get_links)
# print(t_list)


#2.kwargs 参数

# t_list = bs.find_all(id="head")    #搜索是否有属性名为id,属性值为head的标签，是的话返回一个列表
# t_list = bs.find_all(class_=True)  #下划线判断是否属于属性
# print(t_list)


#3.text 参数

import re
# t_list = bs.find_all(text="hao123")
# t_list = bs.find_all(text=["hao123","地图","贴吧"])
# t_list = bs.find_all(text = re.compile("/d"))
# print(t_list)

